package ninth.线程操作的相关方法;

/**
 * 线程的名称一般在启动线程之前设置，但也允许为已经运行的线程设置名称。允许两个Thread对象有相同的名字，但为了清晰，应该尽量避免这种情况的发生。
 *
 * 提示：如果没有设置名字 系统会为其自动分配名称 名称的格式为 Thread-Xx
 */
public class 取得和设置线程名称 {
    public static void main(String[] args) {
        MyThread mt = new MyThread();   //定义Runnable子类对象
        new Thread(mt).start();         //系统自动设置线程名称
        new Thread(mt,"线程-A").start();  //手动设置线程名册
        new Thread(mt,"线程-B").start();  //手动设置线程名册
        new Thread(mt).start();         //系统自动设置线程名称
        new Thread(mt).start();         //系统自动设置线程名称
    }
}

class MyThread implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i <3 ; i++) {
            System.out.println(Thread.currentThread().getName()+"运行，i="+i);
        }
    }
}
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=54067:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 ninth.线程操作的相关方法.取得和设置线程名称
线程-A运行，i=0
线程-A运行，i=1
线程-B运行，i=0
线程-B运行，i=1
Thread-0运行，i=0
Thread-1运行，i=0
Thread-2运行，i=0
Thread-2运行，i=1
Thread-2运行，i=2
线程-A运行，i=2
线程-B运行，i=2
Thread-0运行，i=1
Thread-1运行，i=1
Thread-0运行，i=2
Thread-1运行，i=2

Process finished with exit code 0

 */
/**
 * 从上面的程序中可以看出没有设置线程名称的3个线程对象的名称都是很有规律的，分别为Thread-0、Thread-1、Thread-2
 * 所以类中必然存在一个static类型的属性 用于为线程自动命名
 */